#pragma once
#ifndef __QENV_PREREQS_HH__
#define __QENV_PREREQS_HH__

#include "QEnvString.h"
#include "QEnvPath.h"
#include <QtWidgets\qwidget.h>
#include <ostream>
#include <istream>
#include <sstream>
#include <fstream>
#include <vector>
#include <list>

class QHBoxLayout;
class QLineEdit;
class QPushButton;
namespace QTools
{
	class Log;
};
class QEnvTable;
class QEnvTableItem;
class QEnvStatus;
class QCmdLine;

enum QEnvError
{
	QCMD_ERROR = 1<<1,
	QCMD_SUCCESS = 1<<2,
	QCMD_EMPTY = 1<<3,
	QCMD_QUIT = 1<<4,
	QCMD_QUIT_ERROR = QCMD_ERROR | QCMD_QUIT,
	QCMD_QUIT_OK = QCMD_SUCCESS | QCMD_QUIT
};

enum QProcSwitches
{
	QPROC_NONE = 0,
	QPROC_NOGUI = 1<<1,
	QPROC_VERBOSE = 1<<2,
	QPROC_QUIET = 1<<3,
	QPROC_EXECFILE = 1<<4
};

struct QProcConfig
{
	QProcConfig( size_t errors_ = QCMD_SUCCESS, size_t switches_ = QPROC_NONE)
		: switches(switches_)
		, errors( errors_ )
	{}
	QProcConfig( const QProcConfig& conf ) : switches(conf.switches), errors(conf.errors){}
	QProcConfig& operator = ( const QProcConfig& conf ){ switches = conf.switches; errors = conf.errors; return *this; }

	size_t switches;
	size_t errors;
};


template<typename ItemType>		class QDynHolder;
template<typename ItemType, 
		 typename ContainerType = std::vector<QDynHolder<ItemType>> > class QDynStore;


#endif